
package br.uefs.ecomp.redeneural.model.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import br.uefs.ecomp.redeneural.util.Constantes;

/**
 *
 * @author Beto
 */
public class LeitorArquivo {

    
    public static ArrayList<VetorEntrada> lerBaseDados() {

        ArrayList<VetorEntrada> dadosEntrada = new ArrayList<VetorEntrada>();

        try {
            BufferedReader leitor = new BufferedReader(new FileReader(new File(Constantes.ARQUIVO_DB)));
            String linha;
            double[] parametros;
            double saidaDesejada;

            for (int a = 0; a < Constantes.QTD_DADOS_LIDOS; a++) {
                linha = leitor.readLine();
                String[] tokens = linha.split(",");
                parametros = new double[Constantes.QTD_PARAMETROS];

                for(int i = 0; i < Constantes.QTD_PARAMETROS; i++)
                    parametros[i] = Double.parseDouble(tokens[i+1]);

                saidaDesejada = Double.parseDouble(tokens[tokens.length-1]);
                if(saidaDesejada == 2) saidaDesejada = 0;
                else if(saidaDesejada == 4) saidaDesejada = 1;

                dadosEntrada.add(new VetorEntrada(parametros, saidaDesejada));
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }

        return normalizar(dadosEntrada);
    }


    private static ArrayList<VetorEntrada> normalizar(ArrayList<VetorEntrada> entradas) {
        double maiorValor, valorAtual;

        for (int i = 0; i < Constantes.QTD_PARAMETROS; i++) {
            maiorValor = Double.MIN_VALUE;
            valorAtual = 0.0;

            for (int j = 0; j < entradas.size(); j++) {
                valorAtual = entradas.get(j).getParametros()[i];
                if(valorAtual > maiorValor) maiorValor = valorAtual;
            }

            for (int j = 0; j < entradas.size(); j++) {
                valorAtual = entradas.get(j).getParametros()[i];
                entradas.get(j).setParametro((double) (valorAtual/maiorValor), i);
            }
        }

        return entradas;
    }
}
